<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 该属性一般只存在于函数对象上； 只要是能作为构造器的函数，都包含这个属性。即只要这个函数能通过new生成一个新对象， 那么这个函数肯定具有prototype属性
        console.log((function(){}).prototype);  //object
        
        console.log(Date.prototype); 

        // prototype属性有什么作用呢？作用就是：函数通过new生成的一个对象， 这个对象的原型(__proto__)指向该函数的prototype属性：

        // 其中F表示一个自定义的函数或者是含有prototype属性的内置函数
new F().__proto__ === F.prototype // true
 
 // 通过函数字面量定义的函数的__proto__属性都指向Function.prototype
 (function(){}).__proto__ === Function.prototype // true
  
 // 通过对象字面量定义的对象的__proto__属性都是指向Object.prototype
 ({}).__proto__ === Object.prototype // true
  
 // Object函数的原型的__proto__属性指向null
 Object.prototype.__proto__ === null // true
  
 // 因为Function本身也是一个函数，所以Function函数的__proto__属性指向它自身的prototype
 Function.__proto__ === Function.prototype // true
  
 // 因为Function的prototype是一个对象，所以Function.prototype的__proto__属性指向Object.prototype
 Function.prototype.__proto__ === Object.prototype // true

    </script>
    
</body>
</html>